package com.cskaoyan.javase.oop1._10packing;
/**
 * 包装类使用的一些注意事项
 *  包装类始终是一个类，它是一个引用数据类型，始终是不同于基本数据类型的，所以要注意以下：
 *      1.使用包装类要注意空指针异常，而基本数据类型没有这个烦恼。
 *      2.包装类对象在比较数值大小时，不能再像基本数据类型一样用"=="比较了！而是要使用"equals"方法。
 *
 * @since 10:48
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo5 {
    public static void main(String[] args) {
        System.out.println("hello world!");
        /*
            "=="比较的是地址,而对于整型的包装类型对象,比较地址得不出正确结果
            对于整型的包装类型对象,是存在缓存数组,
            在一个byte取值范围内的,包装类型对象
            都在缓存数组中,预先定义好了
            一旦要使用,就直接从cache中取出来
            所以整型包装类型对象,它的数值范围只要在[-128,127]之间,它们是共用缓存中的对象
            既然共同一个缓存对象,这时它们用"=="比较,是会返回true的

            但是一旦超出byte范围,那么对象都是新建出来的,所以这时再用"=="比较,就会返回false
          */
        Integer a = 120;
        Integer b = 120;
        System.out.println(a == b);

        Integer c = 200;
        Integer d = 200;
        System.out.println(c == d);

        System.out.println("---------------");
        // equals是纯粹比较数值,不会考虑缓冲,不考虑是哪个对象
        System.out.println(a.equals(b));
        System.out.println(c.equals(d));

        int e = 120;
        /*
            因为e是基本数据类型变量
            基本数据类型变量不可能和包装类型直接比较
            所以存在自动拆箱
         */
        System.out.println(e == a);

        int v = 200;
        System.out.println(v == c);

        // Byte va = 120;
        // System.out.println(va == a);
    }
}
